The field of the present invention relates to data communication systems. In particular, the field of the invention relates to a transmit packet buffer which is used to store and transmit data packets or frames which are downloaded from a host memory through a direct memory access (DMA) data transfer and subsequently transmitted onto a network. A dual ported memory enables independent write and read operations. Multiple data packets are queued into the transmit packet buffer and sequentially read out for transmission. Packets can be written into the transmit packet buffer asynchronously with respect to the read operation.
Conventional long distance computer communication networks are based on synchronous bit stream links implemented to support digital telephony channels. However, most intercomputer communication is characterized by a sudden burst of data, involving the exchange of blocks of memory or characters between terminals and CPUs. In order to overcome the requirements to support constant bit rate data traffic, local area networks (LANs) have been optimized for the transmission of data in bursts or packets.
LANs are based on sharing a single physical cable, with no particular synchronization between attached nodes. When a node has a packet to transmit, it attempts to do so provided the medium is not already being used. Packet lengths must be limited to bound the time a node may continuously control a channel. The lack of fixed time slots to implicitly identify a frame's source and destination node requires packets to contain additional bit patterns or address fields to perform this function.
When a communication medium is idle between packets, each transmission includes a sufficient preamble for all attached receivers to resynchronize for the duration of the packet. Only one transmission can occur at a time, since two nodes simultaneously transmitting a packet would cause a collision. In order to overcome this problem, LANs use explicit means to share a communication medium, such as deterministic multiplexing, which prevents collisions from occurring. Other LAN designs rely upon the fact that sources normally transmit data in uncorrelated bursts. Such LANs employ collision recovery mechanisms and rely on statistical multiplexing for communication of data.
A transmit packet buffer is used to interface a host system to a LAN. The transmit packet buffer stores data downloaded from a host to be transmitted over the LAN. The buffer allows data to be downloaded from the host when convenient for the host and subsequently transmitted to the network when convenient for the network increasing the efficiency of the host network system. Furthermore, the host can not directly transmit data to the network because the host clock is not synchronized with the network clock.
One conventional approach is to download data under the host clock domain from the host into a first burst cache. Once the first burst cache has been filled the data can be downloaded under the network clock domain to the transmit packet buffer memory. While the data is being downloaded from the first burst cache, data can start being downloaded from the host to fill a second burst cache. Upon filling the second burst cache the data from the second burst cache is downloaded under the network clock domain to the transmit packet buffer memory. The first and second burst caches are swapped back and forth interrupting the continuous transfer of data from the host. Under this system reading and writing to the same memory or cache under different clock domains will not occur and data synchronization errors are thus avoided.
What is needed is system that will support unlimited burst transfer size from the host, allowing data to be downloaded uninterrupted to the transmit packet buffer. Such a system would increase efficiency of the host, speeding up the transfer of data to the transmit packet buffer and network.
In addition conventional systems typically include a packet header indicating information about the packet including the length of the packet. Specifying the length of the packet in the header requires that the host completely finish constructing the packet before it can be downloaded.
What is needed is a system that supports cut through capability allowing downloading of a data packet from the host to begin before the host has finished constructing the data packet. Cut through capability minimizes latency, increasing the performance of the system.
What is also needed is a system capable of supporting packets of large sizes, possibly larger than the size of the buffer memory. Such capability increases the flexibility of the device insuring that it will not be obsolete if standard packet sizes are increased.
Additionally what is needed is a system which can continuously reclaim buffer memory for new data storage as data is transmitted to the network, rather than reclaiming the memory taken up by the entire packet after transmission of the packet is complete. Continuous reclaim of buffer memory effectively increases the buffer memory size, allowing a smaller and less expensive memory array to be used without sacrificing system performance.